The present disclosure relates to identifying dependency relationships in software and, more specifically, to methods and systems for automatically creating software dependency graphs.
Understanding complex software is a non-trivial task. Previously, static analysis has been applied to identify various relationships among source code elements, such as define-use relationships. However, traditional static analysis approaches are constrained by the programming language itself and cross function precision, do not scale well for very large source code, and cannot handle well missing source code. Modern systems are comprised of dozens of different programming languages further compounding the aforementioned problem. By its nature, static code analysis also only provides a snapshot of non-executing code and does not capture dynamic or execution time information.
Numerous tools exist for statically identifying source code dependencies for specific programming languages. These tools suffer from the above-described limitations, as well as provide a conservative analysis, resulting in numerous false dependencies and making it very difficult to identify any relevant dependencies.